/**
 * 
 */
package cn.com.gzheroli.core.common.service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import cn.com.gzheroli.tag.core.DataGrid;

/**  
* @类名: BeetlService  
* @描述: TODO(这里用一句话描述这个类的作用)  
* @作者: 李长荣 lichang_20011@163.com  
* @日期: 2017年9月14日  上午7:08:07
*@version V1.0  
*    
*/
public interface HeroService {
	/**
	 * 根据实体名称和主键获取实体
	 * 
	 * @param <T>
	 * @param entityName
	 * @param id
	 * @return
	 */
	public <T> T get(Class<T>  entityName, Object id);
	/**
	 * 根据实体名称和字段名称和字段值获取唯一记录
	 * 
	 * @param <T>
	 * @param entityClass
	 * @param propertyName
	 * @param value
	 * @return
	 */
	public <T> T findUniqueByProperty(Class<T> entityClass,String propertyName, Object value,String... suffix);
	/**
	 * 
	* @Title: findUnique  
	* @Description: 根据参数查询单个对象
	* @param @param entityClass
	* @param @param para
	* @param @return    设定文件  
	* @return T    返回类型  
	* @throws
	 */
	public <T> T findUnique(Class<T>  entityClass,Map<String, Object> para,String... suffix);
	/**
	 * 按属性查找对象列表.
	 */
	public  <T> List<T>  findByProperty(Class<T>  entityClass,String propertyName, Object value,String... suffix);
	public void  save(Object entity);
	public  void update(Object entity);
	/**
	 * 
	* @Title: getCountForJdbc  
	* @Description: 根据参数查询记录条数 
	* @param @param sql
	* @param @param params
	* @param @return    设定文件  
	* @return Long    返回类型  
	* @throws
	 */
	public Long getCountForJdbc(String sql,Map... params);

	public void delete(Class obj,Object id);
	public int executeSQL(String sql);
	
	/**
	 * 通过JDBC查找对象集合 使用指定的检索标准检索数据返回数据
	 */
	public List<Map> findForJdbc(String sql, Map para);
	/**
	 * 
	* @Title: findOneForJdbc  
	* @Description: 查询符合条件的第一条  
	* @param @param sql
	* @param @param para
	* @param @return    设定文件  
	* @return Map<String,Object>    返回类型  
	* @throws
	 */
	public Map<String, Object> findOneForJdbc(String sql, Map para);
	/**
	 * 
	* @Title: deleteBySql  
	* @Description: 根据参数删除数据 
	* @param @param sql
	* @param @param paras    设定文件  
	* @return void    返回类型  
	* @throws
	 */
	public void deleteBySql(String sql, Map paras);
	/**
	 * 
	* @Title: findByQueryString  
	* @Description: 根据参数查询 返回对象  
	* @param @param entityClass
	* @param @param para
	* @param @return    设定文件  
	* @return List<T>    返回类型  
	* @throws
	 */
	public <T> List<T> findByQueryString(Class<T>  entityClass,Map<String, Object> para);
	/**
	 * 
	* @Title: delete  
	* @Description: 删除符合条件的记录 
	* @param @param obj
	* @param @param para    设定文件  
	* @return void    返回类型  
	* @throws
	 */
	public void delete(Class obj, Map<String, Object> para);
	/**
	 * 
	* @Title: findByQueryString  
	* @Description: 根据查询条件查询符合条件的对象列表  
	* @param @param sql
	* @param @param entityClass
	* @param @param para
	* @param @return    设定文件  
	* @return List<T>    返回类型  
	* @throws
	 */
	public <T> List<T> findByQueryString(String sql,Class<T>  entityClass,Map<String, Object> para);
	/**
	 * 
	* @Title: findByQueryStringCount  
	* @Description: 根据实体及参数查询符合条件的记录条数
	* @param @param entityClass
	* @param @param para
	* @param @return    设定文件  
	* @return Long    返回类型  
	* @throws
	 */
	public <T> Long findByQueryStringCount(Class<T>  entityClass,Map<String, Object> para);

	/**
	 * 
	* @Title: getStringListBySql  
	* @Description: 根据参数查询单个column的列表  
	* @param @param sql
	* @param @param para
	* @param @return    设定文件  
	* @return List<String>    返回类型  
	* @throws
	 */
	public List<String> getStringListBySql(String sql, Map<String, Object> para);
	/**
	 * 
	* @Title: findOneObjForJdbc  
	* @Description: 根据参数查询单个对象
	* @param @param sql
	* @param @param para
	* @param @param clazz
	* @param @return    设定文件  
	* @return T    返回类型  
	* @throws
	 */
	public <T> T findOneObjForJdbc(String sql, Map para, Class<T> clazz);
	/**
	 * 
	* @Title: selectListByPageSql  
	* @Description:分页获取对象数据 
	* @param @param sql
	* @param @param entityClass
	* @param @param para 
	* (oracle:firstResult 起始行数,maxResults 截至记录行数
	* mysql:beginRow 起始行数,pageSize 每页显示记录数
	* @param page 当前页数
	* @param limit 每页显示条数
	* @param @return    设定文件  
	* @return List<T>    返回类型  
	* @throws
	 */
	public <T> List<T> findForJdbcPage(String sql,Class<T>  entityClass,Map<String, Object> para,int page,int limit);
	
	public  void updateField(Map<String,Object> paraMap,Map<String,Object> whereMap,Class clazz);
	
	public  void saveField(Map<String,Object> paraMap,Class clazz);
	/**
	 * 
	* @Title: saveMap 
	* @Description: 保存map 
	* @param @param paraMap 字段map
	* @param @param tableName   驼峰表名 
	* @param @param clazz   需要保存的实体Class 
	* @return void    返回类型 
	* @throws
	 */
	public  void saveMap(Map<String,Object> paraMap,String tableName,Class clazz);
	/**
	 * 
	* @Title: getDataGridReturn 
	* @Description: 根据条件返回条数和列表 
	* @param @param select 需要查询的字段
	* @param @param clazz 返回需封装的实体class
	* @param @param sql from及where条件
	* @param @param para参数map
	* @param @param page 当前页
	* @param @param rows 每页显示的条数
	* @param @return    设定文件 
	* @return DataGrid    返回类型 
	* @throws
	 */
	public DataGrid getDataGridReturn( String sql,Map para,String select ,Class clazz,int page,int rows);
	/**
	 * 
	* @Title: batchInsert  
	* @Description: 批量保存
	* @param @param entityClass
	* @param @param list    设定文件  
	* @return void    返回类型  
	* @throws
	 */
	public void batchInsert(Class entityClass,List list);
	public  void updateEntitie(Object pojo, Class<?>... args);
	public  void save(Object entity,String suffix);
	public void delete(String tableName, String columnName, Object value);
	public  void update(Object entity,String suffix);
	public <T> List<T> loadAll(Class<T> entityClass);
	public Integer executeSql(String sql, Map<String, Object> param);
	/**
	 * 
	* @Title: updateMap 
	* @Description: 通过map修改 
	* @param @param tableName 数据库表名 驼峰
	* @param @param param 修改参数  驼峰
	* @param @param whereMap 条件参数  驼峰
	* @param @return    设定文件 
	* @return Integer    返回类型 
	* @throws
	 */
	public Integer updateMap(String tableName, Map<String, Object> param,Map whereMap) ;
	/**
	 * 
	* @Title: insertMap 
	* @Description: 通过map保存 
	* @param @param tableName 修改的表名 驼峰
	* @param @param param 保存参数map 驼峰
	* @param @return    设定文件 
	* @return Integer    返回类型 
	* @throws
	 */
	public Integer insertMap(String tableName, Map<String, Object> param);
	/**
	 * 
	* @Title: getStringListBySql 
	* @Description:查询某个字段的列表 
	* @param @param obj
	* @param @param selColName 查询字段 驼峰
	* @param @param para 参数 驼峰
	* @param @param orderCol 排序字段驼峰
	* @param @param orderBy
	* @param @return    设定文件 
	* @return List<String>    返回类型 
	* @throws
	 */
	public List<String> getStringListBySql(Class obj, String selColName,Map<String, Object> para,String orderCol,String orderBy);
	/**
	 * 
	* @Title: batchUpdate 
	* @Description: 根据条件批量更新
	* @param @param sql批量更新模板语句
	* @param @param list    更新条件参数 
	* @return void    返回类型 
	* @throws
	 */
	public void batchUpdate(String sql,List<Map> list);
	/**
	 * 
	* @Title: get 
	* @Description: 根据后缀名和主键值获取实体
	* @param @param resultType 返回实体
	* @param @param pk 主键
	* @param @param suffix 表后缀
	* @param @return    设定文件 
	* @return T    返回类型 
	* @throws
	 */
	public <T> T get(Class<T> resultType, Object pk,String suffix);
	/**
	 * 
	* @Title: getCount 
	* @Description: TODO(这里用一句话描述这个方法的作用) 
	* @param @param tableName 表名 驼峰
	* @param @param whereMap where条件map
	* @param @return    设定文件 
	* @return Long    返回类型 
	* @throws
	 */
	public Long getCount(String tableName,Map<String,Object> whereMap);
}
